//package com.commons.tools.easemob;
//
//import java.util.List;
//import java.util.Map;
//import java.util.concurrent.ConcurrentHashMap;
//
//import com.bln.easemob.been.ChatRoom;
//import com.bln.easemob.been.ChatRoomC;
//import com.bln.easemob.been.ChatRoomU;
//import com.bln.easemob.been.Token;
//import com.bln.easemob.been.TokenR;
//import com.bln.util.HttpUtil;
//import com.bln.util.HttpUtil.HttpData;
//import com.bln.util.Md5;
//import com.google.gson.Gson;
//
///**
// * @File:blnapp: com.bln.easemob :EasemobTemplate.java
// * @Date:2017年10月12日
// * @Copyright (c) 2017, donnie4w@gmail.com All Rights Reserved.
// * @Author: dong
// * @Desc:
// */
//public class EasemobTemplate implements Template {
//
//	EasemobConfBean ecb;
//	String url_head;
//
//	private String key() {
//		return Md5.getString(ecb.getClient_id() + ecb.getClient_secret() + ecb.getGrant_type());
//	}
//
//	private static Map<String, TokenBeen> tokenMap = new ConcurrentHashMap<>();
//
//	public EasemobTemplate(EasemobConfBean ecb) {
//		this.ecb = ecb;
//		this.url_head = ecb.getDomain() + ecb.getOrg_name() + "/" + ecb.getApp_name() + "/";
//	}
//
//	private String getAccessToken() throws Exception {
//		if (tokenMap.containsKey(key()) && System.currentTimeMillis() < tokenMap.get(key()).getOvertime()) {
//			return tokenMap.get(key()).getToken();
//		} else {
//			getToken();
//		}
//		return tokenMap.get(key()).getToken();
//	}
//
//	@Override
//	public synchronized Token getToken() throws Exception {
//		TokenR tb = new TokenR();
//		tb.setClient_id(ecb.getClient_id());
//		tb.setClient_secret(ecb.getClient_secret());
//		tb.setGrant_type(ecb.getGrant_type());
//		String url = url_head + "token";
//		HttpData hd = new HttpUtil().addHeader("Content-Type", "application/json").setValue(new Gson().toJson(tb)).post(url);
//		if (hd.getCode() != 200) {
//			Token token = new Token();
//			token.setAckCode(hd.getCode());
//			return token;
//		}
//		Token tk = new Gson().fromJson(hd.getData(), Token.class);
//		tokenMap.put(this.key(), new TokenBeen().setToken(tk.getAccess_token()).setOvertime(System.currentTimeMillis() + tk.getExpires_in()));
//		return tk;
//	}
//
//	@Override
//	public HttpData registerSingle(String username, String pwd) throws Exception {
//		String url = url_head + "users";
//		return httpPost("{\"username\":\"" + username + "\",\"password\":\"" + pwd + "\"}", url);
//	}
//
//	/**
//	 * 创建群
//	 *
//	 * @param crr
//	 * @return
//	 * @throws Exception
//	 */
//	@Override
//	public ChatRoom createGroupRoom(ChatRoomC crr) throws Exception {
//		String url = url_head + "chatgroups";
//		HttpData hd = httpPost(crr.toJson(), url);
//		if (hd.getCode() != 200) {
//			ChatRoom cr = new ChatRoom();
//			cr.setAckCode(hd.getCode());
//			return cr;
//		}
//		return new Gson().fromJson(hd.getData(), ChatRoom.class);
//	}
//
//	/**
//	 * 删除群
//	 *
//	 * @param groupId
//	 * @return
//	 * @throws Exception
//	 */
//	@Override
//	public ChatRoom deleteGroupRoom(String groupId) throws Exception {
//		String url = url_head + "chatgroups/" + groupId;
//		HttpData hd = httpDel(url);
//		if (hd.getCode() != 200) {
//			ChatRoom cr = new ChatRoom();
//			cr.setAckCode(hd.getCode());
//			return cr;
//		}
//		return new Gson().fromJson(hd.getData(), ChatRoom.class);
//	}
//
//	/**
//	 * 修改群
//	 *
//	 * @param groupId
//	 * @param cru
//	 * @return
//	 * @throws Exception
//	 */
//	@Override
//	public ChatRoom modifyGroupRoom(String groupId, ChatRoomU cru) throws Exception {
//		String url = url_head + "chatgroups/" + groupId;
//		HttpData hd = httpPut(new Gson().toJson(cru), url);
//		if (hd.getCode() != 200) {
//			ChatRoom cr = new ChatRoom();
//			cr.setAckCode(hd.getCode());
//			return cr;
//		}
//		return new Gson().fromJson(hd.getData(), ChatRoom.class);
//	}
//
//	/**
//	 * 添加群 单个用户
//	 *
//	 * @param groupId
//	 * @param username
//	 * @return
//	 * @throws Exception
//	 */
//	@Override
//	public ChatRoom addGroupRoomUser(String groupId, String username) throws Exception {
//		String url = url_head + "chatgroups/" + groupId + "/users/" + username;
//		HttpData hd = httpPost(null, url);
//		if (hd.getCode() != 200) {
//			ChatRoom cr = new ChatRoom();
//			cr.setAckCode(hd.getCode());
//			return cr;
//		}
//		return new Gson().fromJson(hd.getData(), ChatRoom.class);
//	}
//
//	/**
//	 * 添加群 多个用户
//	 *
//	 * @param groupId
//	 * @param username
//	 * @return
//	 * @throws Exception
//	 */
//	@Override
//	public ChatRoom addGroupRoomUsers(String groupId, List<String> userlist) throws Exception {
//		String url = url_head + "chatgroups/" + groupId + "/users";
//		HttpData hd = httpPost("{\"usernames\":" + new Gson().toJson(userlist) + "}", url);
//		if (hd.getCode() != 200) {
//			ChatRoom cr = new ChatRoom();
//			cr.setAckCode(hd.getCode());
//			return cr;
//		}
//		return new Gson().fromJson(hd.getData(), ChatRoom.class);
//	}
//
//	/**
//	 * 获取用户信息
//	 *
//	 * @param username
//	 * @return
//	 * @throws Exception
//	 */
//	@Override
//	public String getUserinfo(String username) throws Exception {
//		String url = url_head + "users" + "/" + username;
//		return httpGet(url);
//	}
//
//	/**
//	 * http post
//	 *
//	 * @param jsondate
//	 *            json
//	 * @param url
//	 * @return
//	 * @throws Exception
//	 */
//	private HttpData httpPost(String jsondate, String url) throws Exception {
//		return new HttpUtil().addHeader("Authorization", "Bearer " + getAccessToken()).addHeader("Content-Type", "application/json").setValue(jsondate).post(url);
//	}
//
//	/**
//	 * http put
//	 *
//	 * @param jsondate
//	 * @param url
//	 * @return
//	 * @throws Exception
//	 */
//	private HttpData httpPut(String jsondate, String url) throws Exception {
//		return new HttpUtil().addHeader("Authorization", "Bearer " + getAccessToken()).addHeader("Content-Type", "application/json").setValue(jsondate).put(url);
//	}
//
//	/**
//	 * http del
//	 *
//	 * @param url
//	 * @return
//	 * @throws Exception
//	 */
//	private HttpData httpDel(String url) throws Exception {
//		return new HttpUtil().addHeader("Authorization", "Bearer " + getAccessToken()).addHeader("Content-Type", "application/json").delete(url);
//	}
//
//	/**
//	 * http get
//	 *
//	 * @param url
//	 * @return
//	 * @throws Exception
//	 */
//	private String httpGet(String url) throws Exception {
//		return new HttpUtil().addHeader("Authorization", "Bearer " + getAccessToken()).get(url);
//	}
//
//	public static void main(String[] args) throws Exception {
//		EasemobConfBean ecb = new EasemobConfBean();
//		ecb.setApp_name("test");
//		ecb.setOrg_name("quncaotech");
//		ecb.setClient_id("YXA6QVwHoDkbEeed88XAdtt-9w");
//		ecb.setClient_secret("YXA6Nj6pBhzLcrLJQrBrxVshSDTL0OI");
//		ecb.setDomain("https://a1.easemob.com/");
//		ecb.setGrant_type("client_credentials");
//		EasemobTemplate et = new EasemobTemplate(ecb);
//		System.out.println(et.getToken());
//		System.out.println(et.registerSingle("test_0001", "123456"));
//		ChatRoomC crc = new ChatRoomC();
//		crc.set_public(true);
//		crc.setAllowinvites(true);
//		crc.setDesc("测试群");
//		crc.setGroupname("my测试group");
//		crc.setMaxusers(300);
//		crc.setMembers_only(true);
//		crc.setOwner("test0001");
//		System.out.println(et.createGroupRoom(crc));
//	}
//
//	class TokenBeen {
//		long overtime;
//		String token;
//
//		public long getOvertime() {
//			return overtime;
//		}
//
//		public String getToken() {
//			return token;
//		}
//
//		public TokenBeen setOvertime(long overtime) {
//			this.overtime = overtime;
//			return this;
//		}
//
//		public TokenBeen setToken(String token) {
//			this.token = token;
//			return this;
//		}
//	}
//
//	@Override
//	public ChatRoom delGroupRoomUser(String groupId, String username) throws Exception {
//		String url = url_head + "chatgroups/" + groupId + "/users/" + username;
//		HttpData hd = httpDel(url);
//		if (hd.getCode() != 200) {
//			ChatRoom cr = new ChatRoom();
//			cr.setAckCode(hd.getCode());
//			return cr;
//		}
//		return new Gson().fromJson(hd.getData(), ChatRoom.class);
//	}
//}
